#include "../header.h"

//1.无名管道 存在与程序运行期间
//2.有固定的读端和写端
//3.半双工
//4.无名管道不能用lseek
//5.读端是fds[0],写端是fds[1]

//TODO 1 关闭读端读   :文件描述符错误。
//TODO 2 关闭写端写   :坏的文件描述符。
//TODO 3 关闭写端读   : 正常。或者读不出数据。 非阻塞形式。
//TODO 4 关闭读端写  ：管道破裂。 Broken pipe

//进程接收到系统信号又三种表现：1 忽略 2捕捉 3 缺省
void sigfun(int signo)
{
    if(signo == SIGPIPE)   //! ctrl + c
        printf("SIGPIPE 此信号已经被编程!\n");
}

//单进程测试
int main()
{	
	//注册函数
	//signal(SIGPIPE,sigfun);
	//一个数组  2个成员
	int fds[2] = {0};
	//创建管道函数
	if(pipe(fds) < 0)
	{
		perror("pipe error\n");
		return -1;
	}
	printf("读端:fds[0] = %d\t写端:fds[1]=%d\n",fds[0],fds[1]);
	
	//关闭读端
	close(fds[0]);	

	//在写端写入数据
	char *str = "hello linux";	
	int wlen = write(fds[1],str,strlen(str));
	if(wlen == -1)
	{
		perror("write error\n");
		return -2;
	}
	printf("pipe test end\n");
	// //关闭读端
	// //在读端读出数据
	// char buf[128] = "";
	// int len = read(fds[0],buf,sizeof(buf));
	// if(len == -1)
	// {
	// 	perror("read error\n");
	// 	return -1;
	// }
	// printf("buf:%s len = %d\n",buf,len);
	return 0;
}
